public class MaxSubArraySum {
    public static void main(String[] args) {
        int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
        int maxSum = maxSubArray(nums);
        System.out.println("Maximum subarray sum: " + maxSum);
    }

    public static int maxSubArray(int[] nums) {
        int maxSum = nums[0]; // 最大连续子序列和
        int currentSum = nums[0]; // 当前连续子序列和

        // 从第二个元素开始遍历数组
        for (int i = 1; i < nums.length; i++) {
            // 如果当前连续子序列和为负数，则重新开始计算连续子序列和
            currentSum = Math.max(nums[i], currentSum + nums[i]);
            // 更新最大连续子序列和
            maxSum = Math.max(maxSum, currentSum);
        }

        return maxSum;
    }
}
